package views;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JOptionPane;

import core.logic.services.utilServices.ValidatieService;
import core.models.dataModels.BoardingSecurityCheckModel;
import core.models.domainModel.Adres;
import core.models.domainModel.Passagier;
import core.models.domainModel.Persoon;

import javax.swing.JTextField;
import javax.swing.JLabel;

import controllers.BoardingSecurityCheckController;
import net.miginfocom.swing.MigLayout;


public class BoardingSecurityCheckView extends JFrame
{	
	private static final long serialVersionUID = 1L;
	private JTextField txtIdentiteitskaartNr;
	private JTextField txtNaam;
	private JTextField txtVoornaam;
	private JTextField txtGeboortedatum;
	private JTextField txtStraat;
	private JTextField txtHuisnummer;
	private JTextField txtBus;
	private JTextField txtGemeente;
	private JTextField txtPostcode;
	private JTextField txtLand;
	private JTextField txtBoekingNr;
	private BoardingSecurityCheckModel model;
	
	public BoardingSecurityCheckView(BoardingSecurityCheckModel m) 
	{
		setTitle("Boarding Security Check");
		setLocationByPlatform(true);
		model = m;
		
		//Labels
		JLabel lblIngaveIdentiteitskaartNr = new JLabel("Paspoortnummer:");
		JLabel lblNaam = new JLabel("Naam:");
		JLabel lblVoornaam = new JLabel("Voornaam:");
		JLabel lblGeboortedatum = new JLabel("Geboortedatum:");
		JLabel lblStraat = new JLabel("Straat:");
		JLabel lblHuisnummer = new JLabel("Huisnummer");
		JLabel lblBus = new JLabel("Bus:");
		JLabel lblGemeente = new JLabel("Gemeente:");
		JLabel lblPostcode = new JLabel("Postcode");
		JLabel lblLand = new JLabel("Land:");
		JLabel lblNewLabel_8 = new JLabel("Persoonsgegevens");
		
		final JLabel lblBoekingNr = new JLabel("Boekingnummer:");
		
		final JButton btnToonPassagier = new JButton("Toon passagier");
		final JButton btnNieuwePassagier = new JButton("Nieuwe Passagier");		
		final JButton btnValidatieBoeking = new JButton("Valideer Boeking");
		final JButton btnCancel = new JButton("Annuleren");		
		final JButton btnSecurityOk = new JButton("Security Ok");
		
		btnSecurityOk.setVisible(false);
		btnValidatieBoeking.setVisible(false);
		
		lblNaam.setEnabled(false);			
		lblVoornaam.setEnabled(false);		
		lblGeboortedatum.setEnabled(false);		
		lblStraat.setEnabled(false);		
		lblHuisnummer.setEnabled(false);	
		lblBus.setEnabled(false);		
		lblGemeente.setEnabled(false);		
		lblPostcode.setEnabled(false);			
		lblLand.setEnabled(false);
		lblBoekingNr.setVisible(false);		
		
		//Layout
		txtIdentiteitskaartNr = new JTextField();
		txtIdentiteitskaartNr.setColumns(10);		
		txtNaam = new JTextField();
		txtNaam.setEnabled(false);		
		txtNaam.setColumns(10);					
		txtVoornaam = new JTextField();
		txtVoornaam.setEnabled(false);		
		txtVoornaam.setColumns(10);			
		txtGeboortedatum = new JTextField();
		txtGeboortedatum.setEnabled(false);		
		txtGeboortedatum.setColumns(10);		
		txtStraat = new JTextField();
		txtStraat.setEnabled(false);		
		txtStraat.setColumns(10);		
		txtHuisnummer = new JTextField();
		txtHuisnummer.setEnabled(false);
		txtHuisnummer.setColumns(10);		
		txtBus = new JTextField();
		txtBus.setEnabled(false);		
		txtBus.setColumns(10);			
		txtGemeente = new JTextField();
		txtGemeente.setEnabled(false);		
		txtGemeente.setColumns(10);		
		txtPostcode = new JTextField();
		txtPostcode.setEnabled(false);		
		txtPostcode.setColumns(10);		
		txtLand = new JTextField();
		txtLand.setEnabled(false);		
		txtLand.setColumns(10);		
		txtBoekingNr = new JTextField();
		txtBoekingNr.setVisible(false);
		txtBoekingNr.setColumns(10);		
		txtIdentiteitskaartNr.setName("Id");
		
		ActionListener listener = new ActionListener()
		{			
			@Override			 
			public void actionPerformed(ActionEvent e)
			{
					String naam = "";
					if(e.getSource()==btnToonPassagier)
					{	
						txtBoekingNr.setEnabled(true);
						btnSecurityOk.setVisible(false);
						
						model = new BoardingSecurityCheckModel();
						for(Component c: getContentPane().getComponents())
						{
							if(c instanceof JTextField)
							{
								naam = ((JTextField)c).getName();
								if(naam == null)
								{
									((JTextField) c).setText("");
								}																
							}
						}
						//Code
						if(txtIdentiteitskaartNr.getText().length()<=0)
						{
							JOptionPane.showMessageDialog(null, "Gelieve de id nr in te geven");
							requestFocusInWindow();
							
							changeIdentiteitOk(lblBoekingNr, false);
						}
						else
						{							
							model.getPassagier().setPaspoortNr(txtIdentiteitskaartNr.getText());						
							model = BoardingSecurityCheckController.getPersoonByIdKaartNr(model);					
							
							Passagier p = model.getPassagier();
							Persoon pe = model.getPassagier().getPersoon();
							Adres a = model.getPassagier().getPersoon().getAdres();
							//Invullen persoon gegevens
							
							try
							{
								txtGeboortedatum.setText(pe.getGeboortedatum());
								txtNaam.setText(pe.getNaam());
								txtVoornaam.setText(pe.getVoornaam());	
								//Invullen adres gegevens
								txtBus.setText(a.getBus());
								txtGemeente.setText(a.getGemeente());
								txtHuisnummer.setText(String.valueOf(a.getHuisnummer()));
								txtLand.setText(a.getLand());
								txtPostcode.setText(a.getPostcode());
								txtStraat.setText(a.getStraat());
								changeIdentiteitOk(lblBoekingNr, true);
								txtIdentiteitskaartNr.setEnabled(false);
								txtBoekingNr.requestFocus();
								btnValidatieBoeking.setVisible(true);
								
							}
							catch(NullPointerException nex)
							{
								JOptionPane.showMessageDialog(null, "Deze id nr zit niet in het systeem");
								changeIdentiteitOk(lblBoekingNr,false);								
								txtIdentiteitskaartNr.requestFocus();
							}
						}
					}
					else
						if(e.getSource()==btnNieuwePassagier)
						{
							for(Component c: getContentPane().getComponents())
							{
								if(c instanceof JTextField)
								{
									((JTextField) c).setText("");													
								}
							}
							txtIdentiteitskaartNr.requestFocus();
							changeIdentiteitOk(lblBoekingNr, false);
							txtIdentiteitskaartNr.setEnabled(true);
							btnSecurityOk.setVisible(false);
							btnValidatieBoeking.setVisible(false);
						}
						else
						{
							if(e.getSource()==btnValidatieBoeking)
							{	
								boolean boekingOk = false;
								if(validateIntBoeking()== true)
								{
									//Ophalen van alle vluchten die geboekt zijn door de persoon(PaspoortNummer)
									//Lieven Drijkoningen
									BoardingSecurityCheckController.setGeboekteVluchtenPassagier(model);
									for(Integer i: model.getBoekingen())
									{
										if(Integer.parseInt(txtBoekingNr.getText()) == i)
										{
											boekingOk = true;
										}
									}
									if(boekingOk == true)
									{
										JOptionPane.showMessageDialog(null, "Boeking in orde");
										btnSecurityOk.setVisible(true);		
										txtBoekingNr.setEnabled(false);
										model.getPassagier().setPassagierId(Integer.parseInt(txtBoekingNr.getText()));
									}
									else
									{
										JOptionPane.showMessageDialog(null, "Boeking komt niet overeen met identiteitskaart!");
										txtBoekingNr.requestFocus();
									}									
								}
								
							}
							else 
								if(e.getSource()== btnSecurityOk)
								{
									BoardingSecurityCheckController.updateStatusSecurePassagier(model);
									JOptionPane.showMessageDialog(null, "De status van de passagier is aangepast naar 'SEC'");
								}
								else
									if(e.getSource()== btnCancel)
									{
										BoardingSecurityCheckController.closeView();
									}
						}
							
					}

			private void changeIdentiteitOk(final JLabel lblBoekingNr, boolean b)
			{
				model.setIdentiteit(b);	
				lblBoekingNr.setVisible(b);
				txtBoekingNr.setVisible(b);
			}
			
			private boolean validateIntBoeking()
			{
				if(!ValidatieService.isInteger(txtBoekingNr, "Boekingnummer"))
				{
					return false;
				}
				return true;
			}
		};
		
		btnToonPassagier.addActionListener(listener);
		btnNieuwePassagier.addActionListener(listener);
		btnValidatieBoeking.addActionListener(listener);
		btnSecurityOk.addActionListener(listener);
		btnCancel.addActionListener(listener);
		
		setAutoRequestFocus(true);
		getContentPane().setLayout(new MigLayout("", "[105px][120px][111px][87px]", "[20px][14px][20px][20px][20px][20px][20px][20px][20px][20px][20px][23px][23px]"));
		getContentPane().add(lblIngaveIdentiteitskaartNr, "cell 0 0,alignx left,aligny center");
		getContentPane().add(txtIdentiteitskaartNr, "cell 1 0,growx,aligny top");
		getContentPane().add(lblBoekingNr, "cell 2 0,alignx left,aligny center");
		getContentPane().add(txtBoekingNr, "cell 3 0,alignx left,aligny top");
		getContentPane().add(lblNewLabel_8, "cell 1 1,alignx center,aligny top");
		getContentPane().add(lblNaam, "cell 0 2,alignx right,aligny center");
		getContentPane().add(txtNaam, "cell 1 2,growx,aligny top");
		getContentPane().add(lblVoornaam, "cell 0 3,alignx right,aligny center");
		getContentPane().add(txtVoornaam, "cell 1 3,growx,aligny top");
		getContentPane().add(lblGeboortedatum, "cell 0 4,alignx right,aligny center");
		getContentPane().add(txtGeboortedatum, "cell 1 4,growx,aligny top");
		getContentPane().add(lblStraat, "cell 0 5,alignx right,aligny center");
		getContentPane().add(txtStraat, "cell 1 5,growx,aligny top");
		getContentPane().add(lblHuisnummer, "cell 0 6,alignx right,aligny center");
		getContentPane().add(txtHuisnummer, "cell 1 6,growx,aligny top");
		getContentPane().add(lblBus, "cell 0 7,alignx right,aligny center");
		getContentPane().add(txtBus, "cell 1 7,growx,aligny top");
		getContentPane().add(lblGemeente, "cell 0 8,alignx right,aligny center");
		getContentPane().add(txtGemeente, "cell 1 8,growx,aligny top");
		getContentPane().add(lblPostcode, "cell 0 9,alignx right,aligny center");
		getContentPane().add(txtPostcode, "cell 1 9,growx,aligny top");
		getContentPane().add(lblLand, "cell 0 10,alignx right,aligny center");
		getContentPane().add(txtLand, "cell 1 10,growx,aligny top");
		getContentPane().add(btnToonPassagier, "cell 0 11,alignx left,aligny top");
		getContentPane().add(btnNieuwePassagier, "cell 1 11,growx,aligny top");
		getContentPane().add(btnValidatieBoeking, "cell 2 11,alignx left,aligny top");
		getContentPane().add(btnSecurityOk, "cell 3 11,alignx left,aligny top");		
		getContentPane().add(btnCancel, "cell 0 12,growx,aligny top");
		
	}
}
